Future 任务机制和 FutureTask
前言
今天在完成功能的时候,使用到 Future 在这里记录一下,自己所了解的到知识,希望可以帮到需要的朋友。
Future 类
Future 类就是对于具体的 Runnable 或者 Callable 任务的执行结果进行取消、查询是否已经完成、获取结果。必要时可以通过 get 方法获取执行结果,该方法会阻塞直到任务返回结果。Future 位于 java.util.concurren 包下,它也是一个接口,如下:
|
|
也就是说 Future 提供了三种功能:
- 判断任务是否完成。
- 能够中断任务。
- 能够获取任务执行结果。
FutureTask 类
因为 Future 只是一个接口,所以无法直接用来创建对象使用的,因此就有了 FutureTask 。
FutureTask 目前是 Future 接口的一个唯一实现类:
FutureTask 类
|
|
RunableFuture 类
|
|
可以看出 RunnableFuture 继承了 Runnable 和 Future 接口,而 FutureTask 实现了 RunnableFuture 接口。所以 FutureTask 既可以作为 Runnable 被线程执行,又可以作为 Future 得到 Callable 的返回值。
FutureTask 提供了2个构造器:
|
|
使用场景
在实际工作中,可能需要统计各种类型的报表呈现结果,可能一个大的报表需要依赖很多很小的模块的运算结果,一个线程做可能比较慢,就可拆分成 N 多个小线程,然后将结果合并起来作为大的报表呈现结果。Fork/Join 就是基于 Future 实现的